package com.observer.observer;

import java.util.ArrayList;
import java.util.List;

/***
 *  核心类 服务的提供方 subject
 *  天气服务，将天气情况推送给各个网站
 *  1 包含最新的天气情况
 *  2 包含有订阅者的集合
 *  3 当数据更新的时候，主动调用 CurrentConditions的update方法推送新数据
 */
public class WeatherDataServer implements Subject {

    private float temperature;
    private float pressure;
    private float humidity;

    //自己的网站 通过该对象去推送天气情况
    private List<Observer> observers = new ArrayList<>();

    //得到环境温度 ，得到温度之后就推动给大家
    public void setData(float temperature, float pressure, float humidity) {
        this.temperature = temperature;
        this.pressure = pressure;
        this.humidity = humidity;
        dataChange();

    }

    //数据变化 ， 将最新的数据推送给第三方
    public void dataChange() {
        notifyObserver();
    }

    //注册一个观察者 服务的订阅者
    @Override
    public void registerObserver(Observer o) {
        observers.add(o);
    }

    //移除一个订阅者
    @Override
    public void removeObserver(Observer o) {
        if (observers.contains(o))
            observers.remove(o);
    }

    //当数据变化时候通过 dataChange方法把最新的数据推送给对象
    @Override
    public void notifyObserver() {
        observers.stream().forEach(observer -> {
            observer.update(temperature, pressure, humidity);
        });
    }
}

